package studio.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import studio.excepcion.DAOExcepcion;
import studio.modelo.InstExterno;
import studio.modelo.Cliente;

import studio.util.ConexionBD;

public class InstExternoDAO extends BaseDAO {



	public Collection<InstExterno> buscarINstPorCliente(int idCliente) throws DAOExcepcion {
		System.out.println("InstExternoDAO: buscarINstPorCliente(Buscando....)");
		String query = "Select Instrumento.idInstrumento, Instrumento.caracteristica ,Usuario.nombre, Usuario_instrumento.caracteristicas, Usuario_instrumento.Usuario_idUsuario From " +
		" Instrumento,Usuario, Usuario_instrumento Where Usuario_instrumento.Usuario_idUsuario =" + idCliente + "  " +
		"AND Usuario_instrumento.Usuario_idUsuario= Usuario.idUsuario AND Usuario_instrumento.Instrumento_idInstrumento=Instrumento.idInstrumento";
		//BUSCAR VARIOS PARAMETROS EN DIFERENTES TABLAS Y CARGARLOS EN LA CLASE PARA SER MOSTRADOS
		Collection<InstExterno> lista = new ArrayList<InstExterno>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			//stmt.setString(1, "%" + idCliente + "%");
			rs = stmt.executeQuery();
			//System.out.println("1");
			while (rs.next()) {
				InstExterno vo = new InstExterno();
				Cliente cl = new Cliente();
				//REFERNCIA A LA CLASE CLIENTE Y INSTEXTERNO
				//System.out.println("2");
				cl.setIdUsuario(rs.getInt("Usuario_instrumento.Usuario_idUsuario"));
				cl.setNombres(rs.getString("Usuario.nombre"));
				//CARGA LOS VALORES EN LA CLASE CLIENTE
				vo.setCliente(cl);//CARGA LA CLASE CLIENTE DENTRO DE LA CLASE INSTEXTERNO
				vo.setIdInstrumento(rs.getInt("Instrumento.idInstrumento"));
				vo.setCaracteristicas(rs.getString("Instrumento.caracteristica"));
				vo.setCaracteristicasAdicionales(rs.getString("Usuario_instrumento.caracteristicas"));
				
				lista.add(vo);//ENVIA LA LISTA
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}

	public void insertar(InstExterno vo) throws DAOExcepcion {
		System.out.println("InstExternoDAO: insertar(Insertando.....)");
		String query = "INSERT INTO Usuario_instrumento( Usuario_idUsuario,Instrumento_idInstrumento, Cantidad, caracteristicas) VALUES (?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.Cliente.getIdUsuario());
			stmt.setInt(2, vo.getIdInstrumento());
			stmt.setInt(3, vo.getCantidad());
			stmt.setString(4, vo.getCaracteristicasAdicionales());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	
		public InstExterno buscarINstPorClienteInstr(int idCliente, int idInstr) throws DAOExcepcion {
			System.out.println("InstExternoDAO: buscarINstPorClienteInstr( Buscando....)");
			InstExterno vo = new InstExterno();
			Cliente cl = new Cliente();
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			try {
				String query = "select Usuario_idUsuario, Instrumento_idInstrumento, Cantidad, caracteristicas from Usuario_instrumento where Usuario_idUsuario=? and Instrumento_idInstrumento=? ";
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setInt(1, idCliente);
				stmt.setInt(2, idInstr);
				rs = stmt.executeQuery();
				
				if (rs.next()) {
					
					
					cl.setIdUsuario(rs.getInt(1));
					vo.setCliente(cl);
					vo.setIdInstrumento(rs.getInt(2));
					
					vo.setCaracteristicasAdicionales(rs.getString(4));
					
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return vo;
		}
	
}
